package com.gxa.p2p.controller;

import com.gxa.p2p.businessExceptionCode.ErrorCode;
import com.gxa.p2p.exception.BusinessException;
import com.gxa.p2p.pojo.InvestRecord;
import com.gxa.p2p.service.InvestmentUserService;
import com.gxa.p2p.util.MapUtil;
import io.swagger.annotations.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * TODO
 *对投资人信息操作的控制层
 * @author 瓶子
 * @Date 2020/8/1
 */
@CrossOrigin
@Controller
@ResponseBody
@RequestMapping("/investUser")
@Api(value ="实体类InvestRecord的控制器",tags = "负责处理投资人信息记录")
public class InvestmentUserController {
    @Resource(name="InvestmentUserService")
    InvestmentUserService investmentUserService;

    /**
     *findAllInvestment（此方法为 查询所有的投资人信息
     * @param map 传入的分页页数和每页内容
     * @return 返回的给前端的值，所有InvestRecord的信息
     */
    @PostMapping("/findAll")
    @ResponseBody
    @ApiOperation(value = "查询investRecord的所有用户信息接口",notes = "查询所有用户方法",response = Map.class,httpMethod = "GET")
    public Map<String,Object> findAll(@RequestBody @ApiParam(readOnly = true,name = "map",type = "java.util.Map") Map<String,Object> map) {
        MapUtil mapUtil=new MapUtil();
        List<InvestRecord> investRecords = investmentUserService.find(map);//查询所有的投资用户的信息
        Integer counts = investmentUserService.counts(map);//计算出数据总数
        System.out.println("controller:"+investRecords);//给前端返回一个查询到的总数居条数
        if (investRecords!=null){
            mapUtil.setCode("0");
            mapUtil.setMsg("显示成功");
            mapUtil.put("counts",counts);
            mapUtil.setData(investRecords);//把数据放在map中
        }else {
            throw new BusinessException(ErrorCode.FAILED);//异常处理
        }

        return mapUtil.getMap();//返回的前端值

    }

    /**
     * 条件查询的方法，通过前端查寻投资人的个人电话或名字来查询投资人记录，使用map接收
     * @param map 前端传入的查询条件
     * @return 查询到的返回投资人的信息
     */

    @PostMapping("/findByPN")
    @ResponseBody
    @ApiOperation(value = "查询investRecord个人姓名或者手机号获取个人投资信息",notes = "查询电话或姓名的方法",response = Map.class,httpMethod = "GET")
    public Map<String,Object> findByPhoneNumOrName( @RequestBody @ApiParam(readOnly = true,name = "map",type = "java.util.Map") Map<String,Object> map){
        MapUtil mapUtil=new MapUtil();
        List<InvestRecord> byPhoneNumOrName = investmentUserService.findByPhoneNumOrName(map);//调用Map中的查询电话，姓名的方法，并传入获取到的前端查询的变量
        Integer integer = investmentUserService.counts(map);//数据总量的计算
        if (byPhoneNumOrName!=null){
            mapUtil.put("counts",integer);
            mapUtil.setCode("0");mapUtil.setMsg("查询电话或姓名成功");mapUtil.setData(byPhoneNumOrName);//对数据传入的封装成Map格式
        }else {
            throw new BusinessException(ErrorCode.FAILED);//异常处理
        }
        return mapUtil.getMap();//返回值为JSON格式

    }

    /**
     * 方法：投资人认证状态的查询方式
     * @param map 前端获取的认证状态的变量
     * @return 返回查询到的对象集合的结果给前端
     */
    @PostMapping("/findByVerify")
    @ResponseBody
    @ApiOperation(value = "查询investRecord认证状态获取个人投资信息",notes = "查询认证状态",response = Map.class,httpMethod = "GET")
    public Map<String,Object> findByVerify( @RequestBody @ApiParam(readOnly = true,name = "map",type = "java.util.Map") Map<String,Object> map){
        MapUtil mapUtil=new MapUtil();
        List<InvestRecord> byVerify = investmentUserService.findByVerify(map);//认证状态方法的调用，查询信息
        Integer integer = investmentUserService.counts(map);//数据总量的计算
        if (byVerify!=null){
            mapUtil.setMsg("查询认真成功");
            mapUtil.setCode("0");
            mapUtil.put("counts",integer);
            mapUtil.setData(byVerify);//查询成功后的状态，封装为Map
       } else {
           throw new BusinessException(ErrorCode.FAILED);
        }
        return mapUtil.getMap();//返回值为JSON格式

    }

    /**
     * 方法：查询投资用户的来源方法
     * @param map 投资用户来源的变量
     * @return 返回查询到的投资人的信息
     */
    @PostMapping("/findBySource")
    @ResponseBody
    @ApiOperation(value = "查询investRecord的用户来源的查询",notes = "用户来源",response = Map.class,httpMethod = "GET")
    public Map<String,Object> findBySource( @RequestBody @ApiParam(readOnly = true,name = "map",type = "java.util.Map") Map<String,Object> map){
        MapUtil mapUtil=new MapUtil();
        List<InvestRecord> investSource = investmentUserService.findBySource(map);//通过投资用户的认证状态的变量来串，信息
        Integer integer = investmentUserService.counts(map);//数据总量的计算
        if (investSource!=null){
            mapUtil.setMsg("查询用户来源成功");
            mapUtil.setCode("0");
            mapUtil.put("counts",integer);
            mapUtil.setData(investSource);//查询成功后的状态，封装为Map
        } else {
            throw new BusinessException(ErrorCode.FAILED);//异常处理
        }
        return mapUtil.getMap();//返回值为JSON格式
    }

    /**
     * 方法：投资用户信息的模糊查询的方法
     * @param map 模糊查询的变量
     * @return 返回查询到的投资人的信息
     */
    @PostMapping("/findByLike")
    @ResponseBody
    @ApiOperation(value = "模糊查询投资用户的信息",notes = "模糊查询",response = Map.class,httpMethod = "GET")
    public Map<String,Object> findByLike( @RequestBody @ApiParam(readOnly = true,name = "map",type = "java.util.Map") Map<String,Object> map){
        MapUtil mapUtil=new MapUtil();
        System.out.println("like:"+map);
        List<InvestRecord> byLike = investmentUserService.findByLike(map);//调用模糊查询方法，查询投资人信息
        Integer integer = investmentUserService.counts(map);////数据总量的计算
        if (byLike!=null){
            mapUtil.setMsg("模糊查询用户成功");
            mapUtil.setCode("0");
            mapUtil.put("counts",integer);
            mapUtil.setData(byLike);//查询成功后的状态，封装为Map
        } else {
            throw new BusinessException(ErrorCode.FAILED);//异常处理
        }
        return mapUtil.getMap();//返回值为JSON格式
    }


}
